package com.xfp.mapper;

import com.github.pagehelper.Page;
import com.xfp.pojo.dto.CancelTaskDto;
import com.xfp.pojo.dto.TaskInfoDto;
import com.xfp.pojo.dto.TaskQueryDto;
import com.xfp.pojo.entity.*;
import com.xfp.pojo.vo.CollectReportVo;
import com.xfp.pojo.vo.TaskInfoVo;
import com.xfp.pojo.vo.TaskReportInfoVo;
import com.xfp.pojo.vo.TaskVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

@Mapper
public interface TaskMapper {
    /**
     * 工单状态统计
     * @param start
     * @param end
     */
    List<CollectReportVo> collectReport(String start, String end);

    /**
     * 获取当时工单汇总信息(人员统计头部信息)
     * @param start
     * @param end
     * @return
     */
    List<TaskReportInfoVo> taskReportInfo(String start, String end);

    /**
     * 查询工单基础信息
     * @param dto
     * @return
     */
    Page<Task> taskSearch(TaskQueryDto dto);

    /**
     * 查询工单对应的工单类型详情
     * @param typeIds
     * @return
     */
    List<TaskType> taskTypeSearch(List<Integer> typeIds);

    /**
     * 工单状态列表
     * @return
     */
    @Select("select * from tb_task_status_type")
    List<TaskStatusType> allTaskStatus();

    /**
     * 获取所有工单类型
     * @return
     */
    @Select("select * from tb_task_type")
    List<TaskType> taskTypeList();

    /**
     * 根据工单id获取工单基础信息
     * @param taskId
     * @return
     */
    TaskInfoVo taskInfo(Long taskId);

    /**
     * 根据工单id获取工单详情
     * @param taskId
     * @return
     */
    List<TaskDetails> taskDetailsList(Long taskId);

    /**
     * 补货详情
     * @param taskId
     * @param dto
     */
    void insertTask(Long taskId, TaskInfoDto dto);

    /**
     * 补货详情-货道
     * @param taskId
     * @param dto
     */
    void insertTaskDetails(Long taskId, TaskInfoDto dto);

    @Update("update tb_job set alert_value = #{alertValue}")
    void autoSupplyConfig(AlertValue alertValue);

    /**
     *获取补货预警值
     * @return
     */
    @Select("select alert_value from tb_job where id = 1")
    Integer getAlertValue();

    /**
     *  取消工单
     * @param taskId
     * @param dto
     */
    void cancelTask(Integer taskId, CancelTaskDto dto);

    /**
     * 创建工单
     * @param dto
     */
    void createTask(TaskInfoDto dto);

    /**
     * 创建工单详细列表
     * @param list
     */
    void createTaskDetails(List<TaskDetails> list);
}
